#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/select.h>

int main() {
    fd_set read_fds; // 读取文件描述符集合
    FD_ZERO(&read_fds); // 初始化集合
    FD_SET(STDIN_FILENO, &read_fds); // 将标准输入加入监测
    int max_fd = STDIN_FILENO; // 最大的文件描述符

    struct timeval timeout; // 设置超时时间
    timeout.tv_sec = 5; // 5 秒
    timeout.tv_usec = 0;

    printf("Waiting for input or timeout...\n");

    int ready = select(max_fd + 1, &read_fds, NULL, NULL, &timeout);

    if (ready == -1) {
        perror("select");
        return 1;
    } else if (ready == 0) {
        printf("Timeout! No input received.\n");
    } else {
        if (FD_ISSET(STDIN_FILENO, &read_fds)) {
            char buffer[256];
            if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
                printf("You typed: %s", buffer);
            }
        }
    }

    return 0;
}